<?php
App::uses('AppModel', 'Model');
/**
 * Usuario Model
 *
 * @property Anuncio $Anuncio
 */
class Usuario extends AppModel {
/**
 * Primary key field
 *
 * @var string
 */
	public $primaryKey = 'id_usuarios';
/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'id_usuarios' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'numeric',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'nome' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'email' => array(
			'email' => array(
				'rule' => array('email'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'unique' => array(
				'rule' => 'isUnique',
				'message'=>'E-mail já cadastrado no sistema'
			),
		),
		'senha' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'confirmacao'=>array(
				'rule'=>'senhasIguais',
				'message'=>"Senhas são diferentes"
			)
		),
		'senha_confirmacao' =>array(
			'notempty'=>array('rule'=>array('notempty'),
				'message'=>'Não pode ser vazio'
			)
		),
		'cpf' => array(
			'cpf_invalido' => array(
				'rule' => 'validacpf',
				'message' => 'CPF inválido',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'unique' => array(
				'rule'=>array('isUnique'),
				'message'=>'CPF já cadastrado no sistema'
			),
		),
		'endereco' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message'=>'Não pode ser vazio'
			),
		),
		'numero' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message'=>'Deve ser um número'
			),
		),
		'bairro' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message'=>'Não pode ser vazio'
			),
		),
		'cidade' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message'=>'Não pode ser vazio'
			),
		),
		'cep' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message'=>'Deve ser um número'
			),
		),
		'uf' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message'=>'Deve escolher uma opção'
			),
		),
		'ddd' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message'=>'Deve ser um número'
			),
		),
		'telefone' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message'=>'Deve ser um número'
			),
		),
		
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed

/**
 * hasMany associations
 *
 * @var array
 */
	public $hasMany = array(
		'Anuncio' => array(
			'className' => 'Anuncio',
			'foreignKey' => 'usuario_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'Mensagem' => array(
			'className' => 'Mensagem',
			'foreignKey' => 'usuario_id'
		)
	);
	
	public $belongsTo = array(
		'Estado'=>array(
			'className'=>'Estado',
			'foreignKey'=>'uf',
			'dependent'=>false,
		)
	);
	
	function beforeSave($options = array()) {
		if(isset($this->data['Usuario']['senha']))
        	 $this->data['Usuario']['senha'] = AuthComponent::password($this->data['Usuario']['senha']);
       	if(!isset($this->data['Usuario']['hash']))
       		$this->data['Usuario']['hash'] = AuthComponent::password(
	       										$this->data['Usuario']['cpf'].
	       										$this->data['Usuario']['email'].
	       										$this->data['Usuario']['created'].
	       										$this->data['Usuario']['nome']);
        return true;
    }
    
    public function senhasIguais($data){
    	if(!isset($this->data['Usuario']['senha_confirmacao']) || $data['senha'] == $this->data['Usuario']['senha_confirmacao'])
    		return true;
    	$this->invalidate('senha_confirmacao', 'senhas_diferentes');
    	return false;
    } 
    
	public function validaCPF($data){	
    
		$cpf = str_pad(ereg_replace('[^0-9]', '', $data['cpf']), 11, '0', STR_PAD_LEFT);
	
		// Verifica se nenhuma das sequências abaixo foi digitada, caso seja, retorna falso
	    if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999'){
			$this->invalidate('cpf_invalido', 'cpf_invalido');
	    	return false;
	    }
		else
		{   // Calcula os números para verificar se o CPF é verdadeiro
	        for ($i = 9; $i < 11; $i++) {
	            for ($j = 0, $k = 0; $k < $i; $k++) {
	                $j += $cpf{$k} * (($i + 1) - $k);
	            }
	            $j = ((10 * $j) % 11) % 10;
	
	            if ($cpf{$k} != $j){
	            	$this->invalidate('cpf_invalido', 'cpf_invalido');
	            	return false;
	            }
	        }
	        return true;
	    }
	}

}
